"use strict";
// /** 
//  *  泛型: 软件工程中,我们不仅要创建一致的定义良好的API，同时也要考虑可重用性。组件不仅能够之处当前的数据类型,
//  * 同时也能支持未来的数据类型，这在创建大型系统时为你提供十分灵活的功能。
//  * 
//  * 在像C#和Java这样的语言中，可以使用泛型来创建可重用的组件，一个组件可以支持多种类型数据。这样用户就可以以自己的数据类型来使用组件。
//  * 
//  * 通俗理解：泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持 
//  * 
//  * 
//  * 
//  * 
//  *  
//  * 
//  *
//  *
//  */
// //  T表示泛型，具体什么类型是调用这个方法的时候决定的 ,当然也可以用其它字母代替语法上没啥问题，但是建议用 'T' 来书写
// //  function fn<T> (value:T) {
// //   return value
// //  }
// //  alert(fn<number>(123))
// function f<T>(value: T): any {
//   return `${value} -- any类型哦` // 此时返回值不受限制
// }
// alert(f<number>(123))
// /** 
//  *  类的泛型
//  *  
//  * 
//  * 
//  * 
//  **/
//  class MinCal<T> {
//   public list: T[] = []
//   add(value: T) {
//     this.list.push(value)
//   }
//   minNum(): T {
//     let minNum: T = this.list[0]
//     for(let i = 0; i < this.list.length; i++) {
//       if (minNum > this.list[i]) {
//         minNum = this.list[i]
//       }
//     }
//     return minNum
//   }
//  }
//  let p = new MinCal<number>() // 这里规定类里面的方法传递参数的类型
//  p.add(123)
//  p.add(1)
//  p.add(10)
//  p.add(22)
// //  p.add('123') // 报错
//  alert(p.minNum())
